﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FrbaCommerce.Clases;
using FrbaCommerce.Ver_Publicacion;


namespace FrbaCommerce.Comprar_Ofertar
{
    public partial class AltaOferta : Form
    {
        Oferta oferta = new Oferta();
        ComprarOfertar parentForm;

        public AltaOferta(decimal cod_publi, ComprarOfertar parent)
        {
            InitializeComponent();
            this.label_cod_publi.Text = cod_publi.ToString();
            parentForm = parent;
            this.label_ultimaOferta.Text = getUltimoMontoOferta();
            if (preguntasHabilitadas(cod_publi))
            {
                this.link_preguntar.Visible = true;
                this.link_preguntar.Click += new EventHandler(link_preguntar_Click);
            } 

        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void link_ver_publi_Click(object sender, EventArgs e) 
        {
            VerPublicacion publiInfo = new VerPublicacion(Convert.ToDecimal(this.label_cod_publi.Text));
            publiInfo.ShowDialog();
        }

        /*ACCION GUARDAR: valida y guarda el monto*/
        private void btn_guardar_Click(object sender, EventArgs e)
        {
            if (!validarMonto()) 
            {
                MessageBox.Show("Monto invalido, por favor reingrese su oferta.");
                return;
            }
            
            try
            {
                this.oferta.setDatos(Convert.ToDecimal(this.label_cod_publi.Text), this.parentForm.getIdUsuarioLogueado(), Convert.ToInt32(this.tx_monto.Text));
                this.oferta.guardar();
                MessageBox.Show("Su oferta ha sido realizada");
            }
            finally
            {
                this.Close();
            }
        }

        private Boolean validarMonto() 
        {
            int montoIngresado;
            Decimal montoBase = Convert.ToDecimal(this.label_ultimaOferta.Text);
            return (this.tx_monto.Text.Length > 0 && Int32.TryParse(this.tx_monto.Text, out montoIngresado) &&
                   ( montoBase < montoIngresado  ));   
        }

        /*TRAE LA ULTIMA OFERTA REALIZADA, SI NO HAY OFERTAS, MUESTRA EL MONTO MINIMO*/
        private String getUltimoMontoOferta() 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data;
            String query = "select TOP 1 monto from ASDF.Bitacora_Ofertas where cod_publi = " + this.label_cod_publi.Text;
            query += " order by monto DESC";
           
            try 
            {
                data = conexion.ejecutarConsulta(query);
                if (data.Tables[0].Rows.Count == 0) /*NO HAY OFERTAS*/
                {
                   return getMontoOferta(); /*MONTO ORIGINAL DEFINIDO EN LA PUBLI*/
                }
                else
                {
                    return data.Tables[0].Rows[0].ItemArray[0].ToString();
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }

            return "Sin ofertas";       
        }

        //GET MONTO ORIGINAL DE LA PUBLICACION
        private String getMontoOferta()
        {
            ConexionSql conexion = new ConexionSql();
            DataSet data;
            String query = "select monto from ASDF.Publicacion where cod=" + this.label_cod_publi.Text;
            try 
            {
             data = conexion.ejecutarConsulta(query);
             return data.Tables[0].Rows[0].ItemArray[0].ToString();
            }

            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }
            return "0";
        }

        private void link_preguntar_Click(object sender, EventArgs e)
        {
            AltaPregunta pregunta = new AltaPregunta(Convert.ToDecimal(this.label_cod_publi.Text), parentForm.getIdUsuarioLogueado());
            pregunta.ShowDialog();
        }

        private bool preguntasHabilitadas(decimal cod_publi)
        {
            DataSet data;
            ConexionSql conexion = new ConexionSql();
            String query = "select preguntas_habilitadas from ASDF.Publicacion where cod = " + cod_publi.ToString();

            try
            {
                data = conexion.ejecutarConsulta(query);
                return Convert.ToBoolean(data.Tables[0].Rows[0].ItemArray[0].ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }

            return false;
        }
    }
}
